package frsf.cidisi.exercise.arq.search;

import frsf.cidisi.faia.solver.search.IStepCostFunction;

import frsf.cidisi.faia.solver.search.NTree;

/**
 * This class can be used in any search strategy like
 * Uniform Cost.
 */
public class CostFunction implements IStepCostFunction {

    /**
     * This method calculates the cost of the given NTree node.
     */
    @Override
    public double calculateCost(NTree node) {
        
       if(node.getAction().toString().equals("JuntarCofre"))
       	{
    	   return 0; /*no asociamos un costo a la accion de juntar un cofre*/
       	}
       else
       	   {
    	   	NTree padre=node.getParent();
    	   	EstadoArqueologo estadoPadre;
    	    EstadoArqueologo estadoActual=(EstadoArqueologo)node.getAgentState();
    	   
    	   	if(padre==null){
    	   		  return 0;
    	   		}
    	   	else
    	   		{
    	   		estadoPadre=(EstadoArqueologo)padre.getAgentState();
    	   		int distancia=estadoActual.calcularDistancia(estadoPadre.getposicion(),estadoActual.getposicion());
    	   		if(!estadoActual.puedeJuntar())/*por mas que vaya a esa ciudad no puede juntar el tesoro*/
    	   		{
    	   		 return 2000; /*penalizamos esto con una distancia de 2000*/
    	   	
    	   		 }
    	   		else
		 	   		return distancia;
    	   		}
       	   }
    }
}
